package dk.muldbjergskolen.db;

import java.sql.*;

import dk.muldbjergskolen.model.*;

public class PersonDB {
	private ConnectionDB con;

	public PersonDB() {
		con = ConnectionDB.getInstance();
	}

	public Person getPerson(int id) {
		String query = "SELECT id, fornavn, efternavn, addresse, postNr, tlf, email, cpr FROM Person WHERE id = "
				+ id;
		Person p = null;

		try {
			ResultSet rs = con.getResultSet(query);

			if (rs.next()) {
				p = buildPerson(rs);
			}
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}

		return p;
	}

	private Person buildPerson(ResultSet rs) throws SQLException {
		Person p = new Person(rs.getInt("id"), rs.getString("fornavn"),
				rs.getString("efternavn"), rs.getString("addresse"),
				rs.getInt("postNr"), rs.getString("tlf"),
				rs.getString("email"), rs.getString("cpr"));

		return p;
	}

	/**
	 * Retter en person.
	 * 
	 * @param id
	 *            på den eksisterende person.
	 * @param nyPerson
	 *            objektet på den nye person.
	 * @throws UGyldigtPostNr
	 */
	public void retPerson(int id, Person nyPerson) throws UGyldigtPostNr {
		Person p = nyPerson;

		String query = "UPDATE Person SET fornavn = '" + p.getFornavn() + "',"
				+ " efternavn = '" + p.getEfternavn() + "'," + " addresse = '"
				+ p.getAddresse() + "'," + " postNr = '" + p.getPostNr() + "',"
				+ " tlf = '" + p.getTlf() + "'," + " email = '" + p.getEmail()
				+ "'," + " cpr = '" + p.getCpr() + "'" + " WHERE id = " + id;

		try {
			con.execQuery(query);
		} catch (SQLException e) {
			System.out.println("PersonDB.retPerson: " + e.getMessage());

			// Sandsynligvis et forkert post nr.
			if (e.getMessage().contains("dbo.By")
					&& e.getMessage().contains("postNr")) {
				throw new UGyldigtPostNr();
			}
		}
	}

	// Indsaat person i databasen.
	public void opretPerson(Person p) throws UGyldigtPostNr {
		// Find persontypen. (subklasserne nederst i arvetræet skal altid være
		// først!)
		String personType = null;
		if (p instanceof Elev)
			personType = "Elev";
		else if (p instanceof Laerer)
			personType = "Ansat";
		else if (p instanceof Ansat)
			personType = "Lærer";

		String query = "insert into Person values ('" + p.getFornavn() + "', '"
				+ p.getEfternavn() + "', '" + p.getAddresse() + "', '"
				+ p.getPostNr() + "' , '" + p.getTlf() + "', '" + p.getEmail()
				+ "', '" + p.getCpr() + "', '" + personType + "')";

		try {
			con.execQuery(query);
		} catch (SQLException e) {
			System.out.println(e.getMessage());

			// Sandsynligvis et forkert post nr.
			if (e.getMessage().contains("dbo.By")
					&& e.getMessage().contains("postNr")) {
				throw new UGyldigtPostNr();
			}
		}
	}

	public class UGyldigtPostNr extends Exception {

	}
}
